import { requestClient } from '#/api/request';

/**
 * 权限类型枚举
 */
export enum PermissionType {
  /** 按钮权限 */
  BUTTON = 2,
  /** URL权限 */
  URL = 1,
}

/**
 * 权限数据结构
 */
export interface Permission {
  id?: number;
  permissionCode: string;
  permissionName?: string;
  url?: string;
  method?: string;
  menuId?: number;
  permissionType: PermissionType;
  menuName?: string;
}

/**
 * 权限查询参数
 */
export interface PermissionQueryParams {
  permissionCode?: string;
  permissionName?: string;
  permissionType?: PermissionType;
  menuId?: number;
  pageNum?: number;
  pageSize?: number;
}

/**
 * 分页响应（标准格式）
 */
export interface PageResult<T> {
  list?: T[];
  total: number;
  pageNum?: number;
  pageSize?: number;
  // MyBatis Plus 分页格式
  records?: T[];
  current?: number;
  size?: number;
  pages?: number;
}

/**
 * 获取权限列表（分页）
 */
export async function getPermissionListApi(params: PermissionQueryParams) {
  return requestClient.post<PageResult<Permission>>(
    '/system/api/permission/page',
    params,
  );
}

/**
 * 获取所有权限（不分页）
 */
export async function getAllPermissionsApi(params: PermissionQueryParams) {
  return requestClient.post<Permission[]>(
    '/system/api/permission/list',
    params,
  );
}

/**
 * 获取权限详情
 */
export async function getPermissionDetailApi(id: number) {
  return requestClient.get<Permission>(`/system/api/permission/${id}`);
}

/**
 * 新增权限
 */
export async function addPermissionApi(data: Permission) {
  return requestClient.post('/system/api/permission/add', data);
}

/**
 * 编辑权限
 */
export async function updatePermissionApi(data: Permission) {
  return requestClient.put('/system/api/permission/edit', data);
}

/**
 * 删除权限
 */
export async function deletePermissionApi(id: number) {
  return requestClient.delete('/system/api/permission/delete', {
    data: { id },
  });
}

/**
 * 批量删除权限
 */
export async function batchDeletePermissionApi(ids: number[]) {
  return requestClient.delete('/system/api/permission/batch-delete', {
    data: ids,
  });
}

/**
 * 角色权限树节点
 */
export interface RolePermissionTreeNode {
  /** 权限ID */
  id: number;
  /** 权限编码 */
  permissionCode: string;
  /** 权限名称 */
  permissionName: string;
  /** 权限类型（1-接口权限，2-按钮权限） */
  permissionType: number;
  /** 是否勾选（当前角色是否拥有该权限） */
  checked: boolean;
  /** 接口地址 */
  url?: string;
  /** 请求方法 */
  method?: string;
  /** 所属菜单名称 */
  menuName?: string;
}

/**
 * 获取角色权限列表（用于分配权限）
 */
export async function getRolePermissionsApi(roleId?: number) {
  return requestClient.get<RolePermissionTreeNode[]>(
    '/system/api/rolePermission/getRolePermissions',
    {
      params: roleId ? { roleId } : {},
    },
  );
}

/**
 * 分配角色权限
 */
export async function assignRolePermissionsApi(
  roleId: number,
  permissionIdList: number[],
) {
  return requestClient.post('/system/api/rolePermission/assignRolePermissions', {
    roleId,
    permissionIdList,
  });
}
